package main

import (
    "fmt"
    "os"
    "path/filepath"
)

// check 是一个错误处理辅助函数，如果 err 不为 nil 则直接 panic
func check(e error) {
    if e != nil {
        panic(e)
    }
}

func main() {
    // 创建一个临时文件，"" 表示在系统默认临时目录中创建
    // 第二个参数 "sample" 是文件名前缀，系统会自动生成唯一后缀
    f, err := os.CreateTemp("", "sample")
    check(err)

    // 输出生成的临时文件名
    fmt.Println("Temp file name:", f.Name())

    // 在程序结束前删除该临时文件（清理资源）
    defer os.Remove(f.Name())

    // 向临时文件写入一段二进制内容（1, 2, 3, 4）
    _, err = f.Write([]byte{1, 2, 3, 4})
    check(err)

    // 创建一个临时目录，"" 表示系统默认临时目录
    // "sampledir" 是目录前缀
    dname, err := os.MkdirTemp("", "sampledir")
    check(err)

    // 输出临时目录路径
    fmt.Println("Temp dir name:", dname)

    // 在程序结束前清除该临时目录及其所有内容
    defer os.RemoveAll(dname)

    // 使用 filepath.Join 构造该目录下的一个文件路径
    fname := filepath.Join(dname, "file1")

    // 创建该文件并写入内容
    err = os.WriteFile(fname, []byte{1, 2}, 0666) // 0666 表示文件权限 rw-rw-rw-
    check(err)
}
